
package com.xxmassdeveloper.mpchartexample;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.view.WindowManager;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;

import java.util.ArrayList;
import java.util.List;

/**
 * Example of a heavily customized {@link LineChart} with limit lines, custom line shapes, etc.
 *
 * @version 3.1.0
 * @since 1.7.4
 */
public class MarkerChartActivity extends DemoBase {

    private LineChart lineChart;
    xFormatter xValueFormatter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_markerchart);

        setTitle("LineChartActivity1");

        lineChart = findViewById(R.id.chart1);
        //设置图表属性
        //设置描述文本不显示
//        lineChart.getDescription().setEnabled(false);
//
//        //设置是否可以触摸
//        lineChart.setTouchEnabled(true);
//        lineChart.setDragDecelerationFrictionCoef(0.9f);
//        //设置是否可以拖拽
//        lineChart.setDragEnabled(true);
//        //设置是否可以缩放
//        lineChart.setScaleEnabled(true);
//        lineChart.setHighlightPerDragEnabled(true);
//        lineChart.setPinchZoom(true);
//        lineChart.setDrawGridBackground(false); // 是否显示表格填充颜色
//        // lineChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF);//设置表格填充颜色
//        lineChart.setHighlightPerTapEnabled(true);


        //------------------------------xvalue---------
        ArrayList<String> xvalue = new ArrayList<>();//x轴时间
        xvalue.add("2019-1-9");//当然这样可以把X轴的数据随便设置成啥都行。
        xvalue.add("2019-2-9");
        xvalue.add("2019-3-9");
        xvalue.add("2019-4-9");
        xvalue.add("2019-5-10");
        xvalue.add("2019-6-10");
        xvalue.add("2019-7-10");
        xvalue.add("2019-8-10");
        xvalue.add("2019-9-10");
        xvalue.add("2019-10-10");
        xValueFormatter = new xFormatter(xvalue);//实例化自定义x轴
        setChartXAxis(xValueFormatter);//设置x轴
        setChartYAxis();


        ArrayList<Entry> values1 = new ArrayList<>();//数据源1
        ArrayList<Entry> values2 = new ArrayList<>();//数据源2
        ArrayList<Float> Yvaluesone = new ArrayList<>();//即时形变
        ArrayList<Float> Yvaluestwo = new ArrayList<>();//累计形变
        LineDataSet set1;
        LineDataSet set2;
        //----------------上面这6个对象直接写在activity最顶部，这里我是为了更方便看懂
        for (int i = 0; i < 40; i++) {//设置假的数据
            Yvaluesone.add((float) i);
            Yvaluestwo.add((float) (i + 2));
        }
        for (int i = 0; i < Yvaluesone.size(); i++) {//把数据存转存成Entry的list
            values1.add(new Entry(i, Yvaluesone.get(i)));
        }
        for (int i = 0; i < Yvaluestwo.size(); i++) {
            values2.add(new Entry(i, Yvaluestwo.get(i)));
        }
        //设置数据1  参数1：数据源 参数2：图例名称
        set1 = new LineDataSet(values1, "即时形变");//把Entry格式的list加到第一条折线上
        set1.setColor(Color.WHITE);
        set1.setCircleColor(Color.WHITE);
        set1.setValueTextColor(Color.WHITE);
        set1.setLineWidth(1f);//设置线宽
        set1.setCircleRadius(3f);//设置焦点圆心的大小
        set1.enableDashedHighlightLine(10f, 5f, 0f);//点击后的高亮线的显示样式
        //set1.setHighlightLineWidth(2f);//设置点击交点后显示高亮线宽
        set1.setHighlightEnabled(true);//是否禁用点击高亮线
        set1.setHighLightColor(Color.RED);//设置点击交点后显示交高亮线的颜色
        set1.setValueTextSize(9f);//设置显示值的文字大小
        set1.setDrawFilled(false);//设置禁用范围背景填充

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            //设置渐变
            //设置渐变
            set1.setFillColor(Color.parseColor("#0E7AD4"));
        } else {
            set1.setFillColor(Color.parseColor("#0E7AD4"));
        }
        //设置数据2
        set2 = new LineDataSet(values2, "累计形变");//把Entry格式的list加到第二条折线上
        set2.setColor(Color.BLUE);
        set2.setCircleColor(Color.BLUE);
        set2.setLineWidth(1f);
        set2.setCircleRadius(3f);
        set2.setValueTextSize(9f);
        set2.setValueTextColor(Color.BLUE);

        LineData data = new LineData(set1, set2);
        // 添加到图表中
        lineChart.setData(data);
        //绘制图表
        lineChart.invalidate();
        //点击交叉点弹出Y轴对比数据的关键代码调用，调用的是重写MarkerView的MarkerViews类。

        lineChart.setDrawGridBackground(false);
        lineChart.getDescription().setEnabled(false);
        lineChart.getLegend().setEnabled(false);
        lineChart.setDrawBorders(false);
        lineChart.setMaxVisibleValueCount(0);

        //左右的两根Y轴配置
        lineChart.getAxisRight().setEnabled(false);
//        YAxis yAxis = chart.getAxisLeft();
//        yAxis.setEnabled(true);
//        yAxis.setDrawAxisLine(true);
//        yAxis.setDrawGridLines(true);
//        yAxis.setGridColor(0xffe8e9ee);
//        yAxis.setTextColor(0xff8d909f);
//        yAxis.setTextSize(12f);
//        yAxis.setGranularity(100f);
//        yAxis.setLabelCount(10);

        //X轴配置
        XAxis xAxis = lineChart.getXAxis();
        xAxis.setEnabled(true);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawGridLines(true);
        xAxis.setGridColor(0xffe8e9ee);
        xAxis.setTextColor(0xff8d909f);
        xAxis.setTextSize(12f);
        xAxis.setLabelCount(20);
        xAxis.setGranularity(1f);

        //操作相关
        lineChart.getViewPortHandler().setMinMaxScaleX(1f, 5f);
        lineChart.getViewPortHandler().setMinMaxScaleY(1f, 5f);
        lineChart.setTouchEnabled(true);
        lineChart.setDragEnabled(true);
        lineChart.setScaleEnabled(true);
        lineChart.setPinchZoom(true);
        final MarkerViews mv = new MarkerViews(this, R.layout.maekertextview, lineChart, xvalue);
        mv.setChartView(lineChart);
        // set the marker to the chart
        lineChart.setMarker(mv);
        lineChart.setDrawMarkers(true);
    }
//-----------------关键是不要忘记这里还有个自定义的X轴------

    /**
     * Created by Administrator on 2018/4/25 0025.
     * 自定义x轴
     */
    public class xFormatter extends ValueFormatter {
        private List<String> mvalue;

        public xFormatter(List<String> values) {
            this.mvalue = values;
        }


        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            return mvalue.get((int) value % mvalue.size());
        }
    }

    @Override
    protected void saveToGallery() {

    }

    private void setChartYAxis() {
        //获取右边的轴线
        YAxis rightAxis = lineChart.getAxisRight();
        //设置图表右边的y轴禁用
        rightAxis.setEnabled(false);
        //获取左边的轴线
        YAxis leftAxis = lineChart.getAxisLeft();
        leftAxis.setTextColor(Color.WHITE);
        leftAxis.setAxisLineColor(Color.parseColor("#ffffff"));
        //设置网格线为虚线效果
        leftAxis.enableGridDashedLine(10f, 10f, 0f);
        leftAxis.setDrawGridLines(true);
        leftAxis.setGridColor(Color.WHITE);
        //是否绘制0所在的网格线
        leftAxis.setDrawZeroLine(false);

    }


    private void setChartXAxis(ValueFormatter xValueFormatter) {
        XAxis xAxis = lineChart.getXAxis();
        //xAxis.setLabelRotationAngle(-10);
        //设置字体大小
        xAxis.setTextSize(7f);
        xAxis.setTextColor(Color.parseColor("#ffffff"));
        //设置从x轴发出的横线
        xAxis.setDrawGridLines(true);
        xAxis.setGridColor(Color.WHITE);
        //设置网格线宽度
        xAxis.setGridLineWidth(1);
        //设置显示X轴
        xAxis.setDrawAxisLine(true);
        //设置X轴显示的位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //设置自定义X轴值  注意，这个是自定义的X轴，方法在下面
        xAxis.setValueFormatter(xValueFormatter);
        //一个界面显示6个Lable，那么这里要设置11个
        xAxis.setLabelCount(12);
        //设置最小间隔，防止当放大时出现重复标签
        xAxis.setGranularity(15f);
        //设置为true当一个页面显示条目过多，X轴值隔一个显示一个
        xAxis.setGranularityEnabled(true);
        //设置X轴的颜色
        xAxis.setAxisLineColor(Color.parseColor("#ffffff"));
        //设置X轴的宽度
        xAxis.setAxisLineWidth(1f);
        xAxis.setTypeface(Typeface.DEFAULT);
        // lineChart.invalidate();
    }

}
